package com.dragonwu.service;

import com.dragonwu.constant.Constants;

import java.io.IOException;
import java.util.Map;

/**
 * 验证码类
 * https://github.com/whvcse/EasyCaptcha
 */
public interface EasyCaptchaService {
    /*
     验证码宽度
     */
    Integer CAPTCHA_WIDTH = 130;

    /*
    验证码高度
     */
    Integer CAPTCHA_HEIGHT = 48;
    /*
     验证码长度
     */
    Integer CAPTCHA_LENGTH = 4;

    /*
     验证码类型: 默认图片
     */
    int CAPTCHA_TYPE_DEFAULT_PNG = 10;
    /*
     验证码类型: 动态GIF
     */
    final int CAPTCHA_TYPE_GIF = 20;
    /*
     验证码类型: 中文
     */
    final int CAPTCHA_TYPE_CHINESE = 30;
    /*
     验证码类型: 动态中文
     */
    final int CAPTCHA_TYPE_GIF_CHINESE = 40;
    /*
     验证码类型: 算术
     */
    final int CAPTCHA_TYPE_ARITHMETIC = 50;

    /*
     验证码缓存key前缀
     */
    String CAPTCHA_KEY_PRE = Constants.REDIS_PRE + "captcha:";
    /*
     验证码图片键名
     */
    String IMAGE = "image";
    /*
     验证码UUID键名
     */
    String UUID = "uuid";
    /*
     验证码缓存时间,分
     */
    Integer CAPTCHA_CACHE_TIME = 3;

    /**
     * 生成普通图片验证码
     *
     * @param type 验证码类型
     * @return Map 验证码值，和base64转换的图片
     */
    Map<String, String> outputCaptchaImg(Integer type) throws IOException;

    /**
     * 校验图片验证码
     *
     * @param uuid        存入redis的key
     * @param captchaCode 验证码
     * @throws RuntimeException 验证失败抛出错误
     */
    void verifyCaptchaCode(String uuid, String captchaCode) throws RuntimeException;
}
